package action.chap4;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

import static java.util.stream.Collectors.toList;

//流的扁平化
public class Demo04 {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("Hello", "World");
        String[] arraysWords = {"Hello", "World"};
        Stream<String> stream = Arrays.stream(arraysWords);
        //。因此，map返回的流实际上是Stream<String[]>类型的。你真正想要的是用
        //Stream<String>来表示一个字符流。
        List<String[]> collect = words.stream()
                .map(word -> word.split(""))
                .distinct()
                .collect(toList());

        //使用flatMap方法的效果是，各个数组并不是分别映射成一个流，而是映射成流的内容。
        //所有使用flatMap(Arrays::stream)时生成的单个流都被合并起来，即扁平化为一个流。
        //一言以蔽之,flatMap方法让你把一个流中的每个值都换成另一个流,然后把所有的流连接起来成为一个流.
        List<String> strings = words.stream()
                // 因为这里得到的是一个数组
                .map(word -> word.split(""))
                .flatMap(Arrays::stream)
                .distinct()
                .collect(toList());
        strings.forEach(System.out::println);
    }


}
